/*
 * IndexadorLibros.cpp

 *
 *  Created on: Apr 7, 2014
 *      Author: carlos
 */

#include "IndexadorLibros.h"
#include <map>
#include "Command.h"
#include "comandosusuario/Busqueda.h"
#include "comandosusuario/Eliminar.h"
#include "comandosusuario/Help.h"
#include "comandosusuario/Carga.h"
#include "comandosusuario/Export.h"
#include "comandosusuario/Compresor.h"
#include "comandosusuario/EstadisticaCompresor.h"

#include "../../test/Test.h"
#include "../logical_layer/index/FileHandler.h"
IndexadorLibros::IndexadorLibros() {


}

IndexadorLibros::~IndexadorLibros() {

}

void IndexadorLibros::run(int argc, char** argv) {


	map<string, Command*> commands;

	FileHandler fileHandler;
	Test test(TEST,"test",&fileHandler);

	Busqueda busquedaAutor(BUSQUEDA_AUTOR,"A","Busqueda por Autor",&fileHandler);
	Busqueda busquedaTitulo(BUSQUEDA_TITULO,"T","Busqueda por Titulo",&fileHandler);
	Busqueda busquedaFecha(BUSQUEDA_FECHA,"F","Busqueda por Fecha exacta",&fileHandler);
	Busqueda busquedaId(BUSQUEDA_ID,"ID","Busqueda por identificador ",&fileHandler);

	Eliminar eliminarID(ELIMINAR_ID,"ID","Baja por identificador","==",&fileHandler);
	Eliminar eliminarIDRSS(ELIMINAR_IDRSS,"ID","Baja por identificador de rss","==",&fileHandler);
	Eliminar eliminarIDTWIT(ELIMINAR_IDTWIT,"ID","Baja por identificador de twit","==",&fileHandler);
	Eliminar eliminarFecha(ELIMINAR_FECHA,"F","Baja por fecha exacta","==",&fileHandler);
	Eliminar eliminarFechaMayor(ELIMINAR_FECHA_MAYOR,"F","Baja por fecha mayor",">",&fileHandler);
	Eliminar eliminarFechaMenor(ELMINAR_FECHA_MENOR,"F","Baja por fecha menor","<",&fileHandler);

	Carga cargaRss(CARGA_RSS,CARGA_RSS,"carga de RSS",&fileHandler);
	Carga cargaTweet(CARGA_TWEET,CARGA_TWEET,"carga de TWITS",&fileHandler);
	Export exportar(EXPORTAR_ESTRUCTURAS,"exportar estructuras",&fileHandler);
	Compresor compresor(COMPRIMIR,"comprimir estructuras",&fileHandler);
	Compresor descompresor(DESCOMPRIMIR,"comprimir estructuras",&fileHandler);
	EstadisticaCompresor estadisticaCompresor(ESTADISTICAS_COMPRESORES,"mostrar estadisticas compresores",&fileHandler);

	list<Command*> comandos;
	comandos.push_back(&busquedaAutor);
	comandos.push_back(&busquedaTitulo);
	comandos.push_back(&busquedaFecha);
	comandos.push_back(&busquedaId);
	comandos.push_back(&eliminarID);
	comandos.push_back(&eliminarIDRSS);
	comandos.push_back(&eliminarIDTWIT);
	comandos.push_back(&eliminarFecha);
	comandos.push_back(&eliminarFechaMayor);
	comandos.push_back(&eliminarFechaMenor);
	comandos.push_back(&test);
	comandos.push_back(&cargaRss);
	comandos.push_back(&cargaTweet);
	comandos.push_back(&exportar);
	comandos.push_back(&compresor);
	comandos.push_back(&descompresor);
	comandos.push_back(&estadisticaCompresor);

	Help help(HELP,"AYUDA",comandos);
	comandos.push_back(&help);

	commands[HELP]=&help;
	commands[TEST]=&test;
	commands[BUSQUEDA_AUTOR]=&busquedaAutor;
	commands[BUSQUEDA_TITULO]=&busquedaTitulo;
	commands[BUSQUEDA_FECHA]=&busquedaFecha;
	commands[BUSQUEDA_ID]=&busquedaId;
	commands[ELIMINAR_ID]=&eliminarID;
	commands[ELIMINAR_IDRSS]=&eliminarIDRSS;
	commands[ELIMINAR_IDTWIT]=&eliminarIDTWIT;
	commands[ELIMINAR_FECHA]=&eliminarFecha;
	commands[ELIMINAR_FECHA_MAYOR]=&eliminarFechaMayor;
	commands[ELMINAR_FECHA_MENOR]=&eliminarFechaMenor;
	commands[CARGA_RSS]=&cargaRss;
	commands[CARGA_TWEET]=&cargaTweet;
	commands[EXPORTAR_ESTRUCTURAS]=&exportar;
	commands[COMPRIMIR]=&compresor;
	commands[DESCOMPRIMIR]=&descompresor;
	commands[ESTADISTICAS_COMPRESORES]=&estadisticaCompresor;


	bool hasNotCommands = true;
	char* userCommandStr = NULL;
	if (argc > 1) {
		userCommandStr = argv[1];
	}

	if (userCommandStr != NULL) {
		Command* command = commands[(userCommandStr)];
		if (command != NULL) {
			command->execute(argc, argv);
			hasNotCommands = false;
		} else {
			hasNotCommands = true;
		}
	} else {
		hasNotCommands = true;
	}

	if (hasNotCommands) {

		cout << "Debe ingresar un comando valido los comandos validos son: " << endl;
		help.execute(argc,argv);
	}

}
